package kv

import (
	"errors"
	"sync"
)

type DB struct {
	indexes map[string]int64
	files   *DBFile
	mu      *sync.Mutex
}

func NewDB() *DB {
	return nil
}

func (db *DB) Put(key, value []byte) error {
	if len(key) == 0 {
		return errors.New("数据不存在")
	}
	db.mu.Lock()
	defer db.mu.Unlock()

	offset := db.files.offset

	entry := NewEntry(key, value, PUT)

	err := db.files.Write(entry)

	if err != nil {
		return errors.New("写入失败")
	}

	db.indexes[string(key)] = offset

	return nil
}

func (db *DB) Get(key []byte) (val []byte, err error) {
	if len(key) == 0 {
		return nil, errors.New("数据大小为0")
	}

	offset, ok := db.indexes[string(key)]
	if !ok {
		return nil, errors.New("数据不存在")
	}

	entry, err := db.files.Read(offset)
	if err != nil {
		return nil, errors.New("读取失败")
	}

	return entry.Value, nil
}

func (db *DB) Delete(key []byte) {

}

func (db *DB) Update(key, value []byte) {

}
